草庐IT

TypeScript 运算符

全部标签

c++ - 使用构造函数代替或类型转换运算符

我有以下代码classA{private:intn;public:A(intn):n{n}{}A(constA&a):n{a.n}{}};classB{private:intm;public:B(intn):m{n}{}operatorA()const{returnA(m);}operatorint()const{returnm;}};intmain(int,char**){Bb{1};(A)b;//Failsstatic_cast(b);//Failsb.operatorA();//OK}这失败了callofoverloaded‘A(B&)’isambiguous(gcc,但VC++

c++ - 运算符重载中的 C++ 语法不清晰

我对C++还是个新手,正在尝试理解表达式模板。我在Wikipedia上看到了一个示例代码.我了解大部分程序及其工作原理,但我不清楚编译器如何解释这些行:operatorA&(){returnstatic_cast(*this);}operatorAconst&()const{returnstatic_cast(*this);}来自下面的基本表达式模板类。通常运算符重载的语法是return_datatypeoperator+(args){body}(例如for+operator)但是这会产生错误并且函数中的那些编译没有任何错误。谁能解释一下这两行?运算符之前的A&和Aconst&是做什么

C++ 重载解析、转换运算符和 const

在这种情况下voidf(int*);voidf(constint*);...inti;f(&i);情况很清楚-f(int*)被调用,这似乎是正确的。但是,如果我有这个(这是错误地完成的(*)):classaa{public:operatorbool()const;operatorchar*();};voidfunc(bool);aaa;func(a);operatorchar*()被调用。我不明白为什么这样的决策路径会比使用operatorbool()更好。有什么想法吗?(*)如果将const添加到第二个运算符,代码当然会按预期工作。 最佳答案

C++:使用重载的复合赋值运算符时出现运行时错误

我有一个程序使用一个类来动态分配一个数组。我有重载运算符,可以对来自该类的对象执行操作。当我测试这个程序时,重载的+=工作,但-=不工作。当试图运行重载的-=时程序崩溃,我得到以下运行时错误:p>malloc:*errorforobject0x7fd388500000:pointerbeingfreedwasnot>allocated*setabreakpointinmalloc_error_breaktodebug在私有(private)成员变量中,我这样声明数组:double*array_d;然后我在重载的构造函数中动态分配数组:Students::Students(intclas

c++ - C++ 中大型模的模幂运算失败

这是我用来计算(n^p)%mod的代码。不幸的是,当我从main()方法调用它时,它会因mod的大值(在我的例子中是mod=10000000000ULL)而失败。任何的想法;为什么?ullpowMod(ulln,ullp,ullmod){ullans=1;n=n%mod;while(p){if(p%2==1){ans=(ans*n)%mod;}n=(n*n)%mod;p/=2;}returnans;}这里,ull是unsignedlonglong的类型定义。 最佳答案 是的,您可以在C++中完成。正如其他人所指出的那样,您不能直接这

c++ - 没有可用的可以执行此转换的用户定义转换运算符,或者无法调用该运算符

我有一个奇怪的错误,我不太明白,VS2013。这只是导致相同错误的实际问题的简化。std::functionx=(someCondition==true)?[](){returntrue;}:[](){returnfalse;};VS编译器错误是:1>f:\test\cppconsoleapplication\cppconsoleapplication.cpp(497):errorC2446:':':noconversionfrom'main::'to'main::'1>Nouser-defined-conversionoperatoravailablethatcanperformth

c++ - 将新运算符应用于数组指针的防错方法

在C中,我做int(*ptr)[100];ptr=malloc(sizeof*ptr);//thisistheeasy/errorproofwayofdoingit是否有一种C++方法可以用new运算符做同样的事情int(*ptr)[100];ptr=new__what_comes_here? 最佳答案 int(*ptr)[100];表示ptr是一个指针,它应该保存一个包含100个整数的数组的地址。换句话说,从技术上讲,如果你有,比如:intarr[100];//automatic(compiletimeallocated)obje

c++ - 当条件运算符用于 cv 非限定非数组对象类型的两个 xvalue 时,是否可以生成 cv 限定、数组或函数类型?

给定两个cv-unqualified非数组对象类型T1和T2,可以表达true?std::declval():std::declval()曾经有过cv限定的数组或函数类型吗?我很确定它不能,但我想确保我没有遗漏任何东西。动机:当前提议的决议LWGissue2465不会衰减true?std::declval():std::declval()形式的条件表达式的类型,其中D1和D2由std::decay生产(因此是cv-unqualified非数组对象类型*)。只有当衰减条件表达式的类型没有影响时,这是正确的(如果类型是cv限定的、数组或函数类型**,则不正确)。*忽略“异常函数类型”的情况

c++ - 使用 C API 覆盖 Lua 中的赋值运算符

我在我的C++程序中有对象作为用户数据传递给Lua,我重写了这个用户数据的元表,以便对对象的索引进行赋值(通过__newindex和__index)导致对C的调用,这转换赋值以影响C++对象或将C++元素转换为Lua值(另一个用户数据或基本类型,如bool、number、string)。用户数据作为参数传递给从我的C++程序调用的类似事件的Lua函数。luaL_newmetatable(L,"object");lua_pushstring(L,"__index");lua_pushvalue(L,-2);/*pushesthemetatable*/lua_settable(L,-3);

C++ 是否需要重载运算符的特殊右值变体?

在类似OperatorOverloading的问题+答案中,据说重载二元运算符(例如operator+)的最佳方法是:classX{X&operator+=(constX&rhs){//actualadditionofrhsto*thisreturn*this;}};inlineXoperator+(Xlhs,constX&rhs){lhs+=rhs;returnlhs;}因此,operator+本身通过值获取lhs,通过const引用获取rhs,并通过值返回更改后的lhs.我无法理解如果使用右值作为lhs调用这里会发生什么:这仍然是需要的单一定义吗(编译器是否会优化参数和返回值),或